package cn.iocoder.yudao.module.diy.dal.mysql.addon;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.diy.dal.dataobject.addon.AddonDO;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.diy.controller.admin.addon.vo.*;

/**
 * 装修插件 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface AddonMapper extends BaseMapperX<AddonDO> {

    default PageResult<AddonDO> selectPage(AddonPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<AddonDO>()
                .eqIfPresent(AddonDO::getTitle, reqVO.getTitle())
                .eqIfPresent(AddonDO::getIcon, reqVO.getIcon())
                .eqIfPresent(AddonDO::getAddonKey, reqVO.getAddonKey())
                .eqIfPresent(AddonDO::getAddonDesc, reqVO.getAddonDesc())
                .eqIfPresent(AddonDO::getAddonStatus, reqVO.getAddonStatus())
                .eqIfPresent(AddonDO::getAddonUrl, reqVO.getAddonUrl())
                .eqIfPresent(AddonDO::getAuthor, reqVO.getAuthor())
                .eqIfPresent(AddonDO::getVersion, reqVO.getVersion())
                .betweenIfPresent(AddonDO::getCreateTime, reqVO.getCreateTime())
                .betweenIfPresent(AddonDO::getInstallTime, reqVO.getInstallTime())
                .eqIfPresent(AddonDO::getCover, reqVO.getCover())
                .eqIfPresent(AddonDO::getType, reqVO.getType())
                .eqIfPresent(AddonDO::getSupportApp, reqVO.getSupportApp())
                .eqIfPresent(AddonDO::getIsStar, reqVO.getIsStar())
                .eqIfPresent(AddonDO::getCompile, reqVO.getCompile())
                .orderByDesc(AddonDO::getId));
    }
    default List<AddonDO> selectList(AddonDO reqVO) {
        return selectList(new LambdaQueryWrapperX<AddonDO>()
                .eqIfPresent(AddonDO::getTenantId, TenantContextHolder.getTenantId())
                .eqIfPresent(AddonDO::getAddonKey, reqVO.getAddonKey())
        );
    }
    default List<AddonDO> getAddonListByTenantId(Long tenantId) {
        return selectList(new LambdaQueryWrapperX<AddonDO>()
                .eqIfPresent(AddonDO::getTenantId, tenantId)
        );
    }

    /**
     * 获取默认的插件后续手动给插件则需要修改逻辑
     *
     * @return 默认的插件
     */
    @InterceptorIgnore(tenantLine = "true")
    List<AddonDO> getDefaultAddon();
}